// zipUtils.js
import JSZip from "jszip";
import { saveAs } from "file-saver";
import axios from "axios";

/**
 * 下载并打包文件为 ZIP
 * @param {Array<string>} fileLinks - 文件链接数组
 * @param {string} zipName - 打包后的 ZIP 文件名
 * @returns {Promise<void>}
 */
export async function downloadAndZipFiles(fileLinks, zipName = "files.zip") {
  if (!Array.isArray(fileLinks) || fileLinks.length === 0) {
    throw new Error("文件链接数组不能为空");
  }

  const zip = new JSZip(); // 创建 ZIP 实例

  for (const [index, url] of fileLinks.entries()) {
    try {
      // 提取文件名并解码，若无则使用默认命名
      const rawFileName = url.split("/").pop();
      const fileName = rawFileName
        ? decodeURIComponent(rawFileName)
        : `file_${index}`;
      const response = await axios.get(url, { responseType: "blob" }); // 下载文件
      zip.file(fileName, response.data); // 将文件添加到 ZIP 根目录
    } catch (error) {
      console.error(`下载文件失败：${url}`, error);
    }
  }

  // 生成 ZIP 文件并导出
  return zip.generateAsync({ type: "blob" }).then((content) => {
    saveAs(content, zipName); // 提供 ZIP 下载
  });
}
